/**
 * 
 */
package fr.gfi.agraf.vue.action.administrer.profil;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.util.CollectionUtils;

import fr.gfi.agraf.exception.AgrafException;
import fr.gfi.agraf.service.IProfilService;
import fr.gfi.agraf.utils.PropertiesUtils;
import fr.gfi.agraf.utils.SpringFactory;
import fr.gfi.agraf.vue.action.AbstractApplicationSupportAction;
import fr.gfi.agraf.vue.bean.ComposantDTO;
import fr.gfi.agraf.vue.bean.ProfilDTO;

/**
 * @author Zakaria
 *
 */
public class AjouterProfilAction extends AbstractApplicationSupportAction {
	
	/**
	 * Logger
	 */
	private final static Logger LOGGER = Logger.getLogger(AjouterProfilAction.class);

	public static final String PROFIL_SERVICE = "ProfilService";

	private static final String ERREUR_SAISIE_LIBELLE = "erreur.saisie.libelle";

	/**
	 * 
	 */
	private static final long serialVersionUID = 8556481732141834743L;

	private String libelle;

	private List<Long> composantIds;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * fr.gfi.agraf.vue.action.AbstractApplicationSupportAction#executeAction()
	 */
	@Override
	public String executeAction() throws Exception {
		// Spring, recupere le service profil
		final IProfilService profilService = (IProfilService) SpringFactory.getApplicationContext().getBean(
				PROFIL_SERVICE);
		final ProfilDTO profilDTO = creerProfilDTO();
		try {
			// fait appel au service profil
			profilService.ajouterProfil(profilDTO);
		} catch (final AgrafException ae) {
			// Recupére le message d'erreur
			final String messageErreur = PropertiesUtils.getProperty(ae.getKey());
			// Ajoute action error
			addActionError(messageErreur);
			LOGGER.error(messageErreur,ae);
			return ERROR;
		}
		return SUCCESS;
	}

	/**
	 * Créer un profil à partir de la saisie
	 * 
	 * @return
	 */
	private ProfilDTO creerProfilDTO() {
		// créé le profilDTO
		final ProfilDTO profilDTO = new ProfilDTO();
		profilDTO.setLibelle(libelle);
		final List<ComposantDTO> composantDTOList = new ArrayList<ComposantDTO>();
		// s'il y a des composants on créé les composants DTO
		if (!CollectionUtils.isEmpty(composantIds)) {
			for (final Long id : composantIds) {
				final ComposantDTO composantDTO = new ComposantDTO();
				composantDTO.setId(id);
				composantDTOList.add(composantDTO);
			}
		}
		profilDTO.setListeComposantDTO(composantDTOList);
		return profilDTO;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.opensymphony.xwork2.ActionSupport#validate()
	 */
	@Override
	public void validate() {
		if (StringUtils.isEmpty(libelle)) {
			addActionError(ERREUR_SAISIE_LIBELLE);
			return;
		}

		super.validate();
	}

	/**
	 * @return the libelle
	 */
	public String getLibelle() {
		return libelle;
	}

	/**
	 * @param libelle
	 *            the libelle to set
	 */
	public void setLibelle(final String libelle) {
		this.libelle = libelle;
	}

	/**
	 * @return the composantIds
	 */
	public List<Long> getComposantIds() {
		return composantIds;
	}

	/**
	 * @param composantIds
	 *            the composantIds to set
	 */
	public void setComposantIds(final List<Long> composantIds) {
		this.composantIds = composantIds;
	}

}
